package com.app.yc.ifapp.utils;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * 作者：TanTun
 * 时间：2017/2/22
 * 邮箱：32965926@qq.com
 * 描述：加解密工具类
 */

public class EncryptUtils {

    /**
     * 作者：TanTun
     * 时间：2017/2/22
     * 邮箱：32965926@qq.com
     * 描述：SHA256与SHA512
     */
    public static class SHA {
        /**
         * 传入文本内容，返回 SHA-256 串
         *
         * @param strText 明文字符
         * @return 加密后的字符
         */
        public static String SHA256 ( final String strText)
        {
            return SHA(strText, "SHA-256");
        }

        /**
         * 传入文本内容，返回 SHA-512 串
         *
         * @param strText 明文字符
         * @return 加密后的字符
         */

        public static String SHA512(final String strText) {
            return SHA(strText, "SHA-512");
        }

        /**
         * 字符串 SHA 加密
         *
         * @param strText 明文字符
         * @param strType 算法类型
         * @return 加密后的字符
         */
        private static String SHA(final String strText, final String strType) {
            // 返回值
            String strResult = null;

            // 是否是有效字符串
            if (strText != null && strText.length() > 0) {
                try {
                    // SHA 加密开始
                    // 创建加密对象 并傳入加密類型
                    MessageDigest messageDigest = MessageDigest.getInstance(strType);
                    // 传入要加密的字符串
                    messageDigest.update(strText.getBytes());
                    // 得到 byte 類型结果
                    byte byteBuffer[] = messageDigest.digest();

                    // 將 byte 轉換爲 string
                    StringBuilder strHexString = new StringBuilder();
                    // 遍歷 byte buffer
                    for (byte b : byteBuffer
                         ) {
                        String hex = Integer.toHexString(0xff & b);
                        if (hex.length() == 1) {
                            strHexString.append('0');
                        }
                        strHexString.append(hex);
                    }
                    // 得到返回結果
                    strResult = strHexString.toString();
                } catch (NoSuchAlgorithmException e) {
                    e.printStackTrace();
                }
            }

            return strResult;
        }
    }
}
